package com.icexxx.util;

import java.math.BigDecimal;

/**
 * 数学工具类 主要处理大实数运算问题
 * 
 * @author IceWater
 * @date 2017-02-24
 * @version 1.0
 */
public class IceMathUtil {
	/**
	 * 两个数字相加
	 * 
	 * @param num1 第一个加数
	 * @param num2 第二个加数
	 * @return 两个加数相加的和
	 */
	public static String add(String num1, String num2) {
		BigDecimal dec1 = new BigDecimal(num1);
		BigDecimal dec2 = new BigDecimal(num2);
		return dec1.add(dec2).toString();
	}

	/**
	 * 两个数字想减
	 * 
	 * @param num1 被减数
	 * @param num2 减数
	 * @return 两个数想减的差
	 */
	public static String subtract(String num1, String num2) {
		BigDecimal dec1 = new BigDecimal(num1);
		BigDecimal dec2 = new BigDecimal(num2);
		return dec1.subtract(dec2).toString();
	}

	/**
	 * 两个数相乘的积
	 * 
	 * @param num1 被乘数
	 * @param num2 乘数
	 * @return 两个数相乘的积
	 */
	public static String multiply(String num1, String num2) {
		BigDecimal dec1 = new BigDecimal(num1);
		BigDecimal dec2 = new BigDecimal(num2);
		return dec1.multiply(dec2).toString();
	}

	/**
	 * 两个数相除
	 * 
	 * @param num1 被除数
	 * @param num2 除数
	 * @return 两个数相除的商,保留两位小数
	 */
	public static String divide(String num1, String num2) {
		return divide(num1, num2, 2);
	}

	/**
	 * 两个数相除
	 * 
	 * @param num1 被除数
	 * @param num2 除数
	 * @param scale 商的小数位数
	 * @return 两个除数的商,保留若干位小数
	 */
	public static String divide(String num1, String num2, int scale) {
		BigDecimal dec1 = new BigDecimal(num1);
		BigDecimal dec2 = new BigDecimal(num2);
		return dec1.divide(dec2, scale, BigDecimal.ROUND_HALF_UP).toString();
	}

	/**
	 * 求相反数
	 * 
	 * @param num 原始数值
	 * @return 该数值的相反数
	 */
	public static String negate(String num) {
		return new BigDecimal(num).negate().toString();
	}
}
